package core

import (
	"fmt"
	"math/rand"
	"strings"
	"time"
)

var (
	Certificate      string
	CiphertextLength int = 10
)

func init() {

}

func generateRandomStringUsingBuilder(length int) string {
	const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
	var builder strings.Builder
	// 使用当前时间戳作为种子创建一个新的 rand.Rand 实例
	randGen := rand.New(rand.NewSource(time.Now().UnixNano()))
	for i := 0; i < length; i++ {
		// 使用新的 rand.Rand 实例生成随机字符
		builder.WriteByte(charset[randGen.Intn(len(charset))])
	}
	return builder.String()
}

// "shiqiming_20241224_174136_XXXXXXXX"
func CreateToken(username string) string {
	randStr := generateRandomStringUsingBuilder(CiphertextLength)
	// 获取当前时间
	currentTime := time.Now()
	// 格式化时间为 'YYYYMMDD_HHmmss' 格式
	formattedTime := currentTime.Format("20060102_150405")
	result := randStr + "_" + formattedTime + "_" + username

	// 原始字符串

	// 将字符串中的每个字符取反并输出结果
	var res string
	for _, ch := range result {
		// 按位取反
		invertedCh := ^ch
		// 将结果限制在 ASCII 可显示范围（32-126）
		mappedCh := 32 + (invertedCh % 95)
		// 拼接到结果字符串
		result += string(mappedCh)
	}
	fmt.Println(res)

	// 输出取反后的字符串
	return result
}
